JS30 Day 18 筆記


Posted by GL on 2023-05-23

目標

取得播放清單全部時間的加總

Demo

step 1 : 獲取全部時間的秒數

  1. querySelectorAll 獲取所有的包含 data-time<li> 元素,得到一組 Array-like 的 NodeList 物件,并將 NodeList 轉成 Array
// 使用 Array.from 轉換為 Array
const timeNodes = Array.from(document.querySelectorAll('[data-time]'))
// 使用 spread operator(...) 轉換爲 Array
const timeNodes = [...document.querySelectorAll('[data-time]')]
  1. 獲取所有 data-time 中的時間,將其換成秒數并且將所有秒數加總
const seconds = timeNode
  .map(node => node.dataset.time) // 用 dataset.time 拿到 data-time 的值的陣列
  .map(timeCode =>{
    const [mins, secs] = timeCode
      .split(':') // ['5', '43']
      .map(str => parseFloat(str))  // 字串轉成數字
    return (mins * 60) + secs // 把 time 全部變成秒數

    // 如果不想用 parseFloat 將得到的字串換成數字,可以直接用下方
    // return mins * 60 + secs * 1
    })
  .reduce((total, videoSeconds) => total + videoSeconds,0) // reduce 加總所有秒數

step 2 :

將總秒數轉換成 時: 分: 秒

  1. 從小時開始計算
// 一小時 = 3600 秒
// 一分鐘 = 60 秒
const hours = Math.floor(seconds / 3600) 
const minute = Math.floor(seconds % 3600)/60)
const sec = seconds % 60
console.log(`${hours}: ${minutes}: ${secondsLeft}`)
  1. 從秒開始計算
// 一小時 = 3600 秒
// 一分鐘 = 60 秒
let sec = seconds % 60

// let min = Math.floor(seconds / 60)
// let min = ((seconds - sec) / 60) % 60
let min = (seconds - sec) / 60 


// let hour  = (seconds - min * 60 - sec) / 3600
let hour = Math.floor(min / 60)

min %= 60 

console.log(`${hours}: ${minutes}: ${secondsLeft}`)

參考資料:


#JS 30







Related Posts

CSS 語法架構 (Cascading Style Sheets)

CSS 語法架構 (Cascading Style Sheets)

3. java 17  範例目錄

3. java 17 範例目錄

使用 Gazebo 模擬器控制機器人建立 2D 地圖

使用 Gazebo 模擬器控制機器人建立 2D 地圖


Comments